//
//  ZXOpenAnimateView.swift
//  loveBee
//
//  Created by zhangxing on 2017/8/12.
//  Copyright © 2017年 zhangXing. All rights reserved.
//

import UIKit
import SnapKit
import YYWebImage
class ZXOpenAnimateView: UIView {
    
    //记录广告图片的URL(当网络获取到了图片的地址,就赋值给它)
    var ADImageURLStr: String? {
        //当你获取到了图片的地址,就可以在这里使用didSet方法为ADImageView网络赋值
        didSet {
            
            ADImageView.yy_setImage(with: URL.init(string: ADImageURLStr!), placeholder: #imageLiteral(resourceName: "AD"))
        }
    }
    
    //加载广告图片
    var ADImageView: UIImageView = {
        
        let ADImageView = UIImageView()
        
        ADImageView.frame = CGRect(x: 0, y: 0, width: KWidth, height: KHeight)
        
        
        return ADImageView
    }()
        

    //懒加载scrollView
    lazy var scrollView: UIScrollView = {
        //我们通过一个方法来封装创建的scrollView,要不然全都写在这里显得太冗余了
        //我们在闭包里面调用其他的方法,所以要加上self
        let scrollView = self.setupScrollView()
        
        return scrollView
        
    }()
    
    //懒加载立即体验按钮
    lazy var btn: UIButton = {
        
        let btn = UIButton()
        
        //只要敲image就可以了,就会出现image leteral
        btn.setImage(#imageLiteral(resourceName: "icon_next"), for: .normal)
        
        //设置btn自适应大小
        btn.sizeToFit()
        
        //给btn添加点击事件
        btn.addTarget(self, action: #selector(clickBtn), for: .touchUpInside)
        
        return btn
        
    }()
    
    
    //懒加载pageControl
    lazy var pageControl: UIPageControl = {
        //实例化pageControl
        let pageControl = UIPageControl()
        
        //设置分页指示器的页数是4
        pageControl.numberOfPages = 4
        
        //设置分页指示器的当前选中的指示器点的颜色
        pageControl.currentPageIndicatorTintColor = UIColor.red
        
        //设置分页指示器的当前未选中的指示器点的颜色
        pageControl.pageIndicatorTintColor = UIColor.white
        
        return pageControl
    }()
    
    //当我们在自定义视图的时候,第一步就是要先写这句代码,调用父类的init
    override init(frame: CGRect) {
        super.init(frame: frame)
        
        //当我们在构造这个视图的时候,首先需要加载网络图片
        ZXNetWorkingManager.sharedManager.gainAppInfo(URLStr: "http://iosapi.itcast.cn/loveBeen/ad.json.php", call: "7") { (response, error) in
            if error != nil {
                //如果错误都不等于nil了, 那么我们强制解包就可以了
                print(error!)
                print("图片获取失败")
            }
            else {
                
                //如果能进入到这里,表示网络图片获取成功
                //当然在此之前,我们需要开启info里面的网络请求
                //App Transport Security
//                print(response!)
                
                /*
                 {
                 code = 0;
                 data =     {
                 endtime = 1454255999;
                 "img_big_name" = "http://img01.bqstatic.com/upload/activity/2016011111271981.jpg";
                 "img_name" = "http://img01.bqstatic.com/upload/activity/2016011111271995.jpg";
                 "img_url" = "";
                 starttime = 1450409894;
                 title = "";
                 };
                 msg = success;
                 reqid = 933552221c3e63423e081b932739dba7;
                 }
                 */
                
                //说明这个response是一个字典
                //获取字典类型的data
                let data = (response as! [String: Any?]) ["data"] as! [String: Any?]
                
                //获取图片的URL
                let url = data["img_big_name"] as? String
                
                //接下来我们需要将获取到网络广告图片URL赋值给做缩放动画的imageView的string
                //因为我们是在闭包里面,所以我们在使用属性或者是方法的时候,都需要加上self
                self.ADImageURLStr = url
            }
        }
        
        //当你的网络图片加载完成,就需要搭建UI了
        
        setupUI()
        
        
    }
    
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //  MARK: --   搭建UI
    private func setupUI() {
        
        //搭建之前判断是不是第一次登录,先通过偏好设置取出bool值
        let isNotFirstLogIn = UserDefaults.standard.bool(forKey: IsNotFirstLogIn)
        //如果不是第一次登录了
        if isNotFirstLogIn {
            
            //延迟1秒再执行广告图的缩放动画(为了防止网络图片还没有加载出来,你给0.5秒更多的情况是还没有加载网络图片完成就做了动画,达不到我们想要的效果)
            DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 1, execute: {
                //我们在执行动画前,先发送通知将根视图控制器给切换掉,这样动画一结束,就进入到我们想要的跟视图控制器了
                NotificationCenter.default.post(name: NSNotification.Name(changeRootVC), object: nil)
                
                //将ADImageView添加到父视图中
                KWindow?.addSubview(self.ADImageView)
                
                //让ADImageView做缩放动画
                UIView.animate(withDuration: 1, animations: { 
                    //首先让ADImageView放大2倍
                    self.ADImageView.transform = CGAffineTransform.init(scaleX: 2, y: 2)
                    
                    //在缩放的同时,还需要将透明度渐渐变成0
                    self.ADImageView.alpha = 0

                }, completion: { (_) in
                    
                    //动画结束之后将其从父视图中移除
                    self.ADImageView.removeFromSuperview()
                })
            })
            
        }
        //如果还是第一次登录
        
        //添加scrollView
        addSubview(scrollView)
        
        //添加分页指示器
        addSubview(pageControl)
        
        //添加scrollView的约束
        scrollView.snp.makeConstraints { (make) in
            
            //只需要让scrollView的四周等于父视图就可以了
            make.edges.equalToSuperview()
        }
        
        //添加pageControl的约束
        pageControl.snp.makeConstraints { (make) in
            make.centerX.equalToSuperview()
            
            make.bottom.equalToSuperview()
        }
        
    }
    
    
    
    
    
    
    
    
    private func setupScrollView() -> UIScrollView {
        //创建scrollView
        let scrollView = UIScrollView()
        
        //创建容器视图
        let contentView = UIView()
        
        //添加容器视图
        scrollView.addSubview(contentView)
        
        //只有添加了容器视图之后,我们才能给contentView设置约束
        contentView.snp.makeConstraints { (make) in
            
            //设置容器视图第一步就是要设置容器视图的四周等于滚动视图
            make.edges.equalTo(scrollView)
            
            //高度和scrollView相等
            make.height.equalTo(scrollView)
            
            //宽度等于4倍的屏幕宽度
            make.width.equalTo(4 * KWidth)
        }
        
        //循环创建视图
        for i in 0..<4 {
            
            //1.    创建imageView
            let imageView = UIImageView.init(image: UIImage.init(named: "guide_35_\(i + 1)"))
            
            //2.    将imageView添加到容器视图
            contentView.addSubview(imageView)
            
            //3.    设置imageView的尺寸
            imageView.frame = CGRect.init(x: CGFloat(i) * KWidth, y: 0, width: KWidth, height: KHeight)
        }
        
        //添加立即体验按钮(我们在这里添加是因为我们不需要考虑添加到第四个imageView上,因为只要给定好约束就可以了,)
        contentView.addSubview(btn)
        
        //体验按钮添加了之后我们才能设置约束
        btn.snp.makeConstraints { (make) in
            
            //设置按钮等于contentView的中心点再向右偏移1.5个屏幕的宽度
            make.centerX.equalToSuperview().offset(KWidth * 1.5)
            
            make.bottom.equalToSuperview().offset(-40)
        }
        
        //设置分页属性
        scrollView.isPagingEnabled = true
        
        //设置取消弹簧弹簧效果
        scrollView.bounces = false
        
        //设置不显示垂直滚动条
        scrollView.showsVerticalScrollIndicator = false
        
        //设置不显示横向滚动条
        scrollView.showsHorizontalScrollIndicator = false
        
        //设置scrollView的代理
        scrollView.delegate = self
        
        return scrollView
        
    }
    
    //  MARK: --  当我们点击立即体验按钮执行的方法
    @objc private func clickBtn() {
        
        print("当我们点击立即体验按钮执行的方法")
        //只要我们已经点击了这个立即体验按钮,就表示我们下次再登录的时候,就不是第一次登录了
        //记录用户偏好设置这是第一次,下次就不是第一次了
        UserDefaults.standard.set(true, forKey: IsNotFirstLogIn)
        
        //我们第一次登录都是要做一个水滴动画
        let transition = CATransition()
        
        //设置转场动画的类型
        transition.type = "rippleEffect"
        
        //设置转场动画的时间
        transition.duration = 2
        
        //在kWindow上做动画(如果我们不在这里加上一个感叹号,那么这里的kwindow就是一个可选类型了)
        KWindow?.layer.add(transition, forKey: nil)
        
        //但不管你是做水滴动画还是做缩放动画,都是要进入tabbarController的,所以要发送通知给appdelegate,让他切换根视图控制器
        NotificationCenter.default.post(name: NSNotification.Name(rawValue: changeRootVC), object: nil)
        
        
    }
    
    
    
}


//实现代理方法
extension ZXOpenAnimateView: UIScrollViewDelegate {
    
    //  MARK: --   监听滚动的范围
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        let currentCount = scrollView.contentOffset.x / KWidth
        //加上0.5达到的效果是只要你滚动超过了一半,分页指示器就向下一个移动
        pageControl.currentPage = Int(currentCount + 0.5)
    }
    
}










